/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Principals.Constantes;
import Model.Pedido;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;

/**
 *
 * @author Paola
 */
public class PedidoDAO {
    public static Pedido registrarPedido(Pedido pedido) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.save(pedido);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        } finally {
            UsuarioPresenter.registrarLogUsuario(Main.usr, "pedido", pedido.getIdPedido() + "->" + pedido.getFechaRegistro(), Constantes.LOG_INSERT);
        }
        return pedido;
    }

    public static void modificarPedido(Pedido pedido) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.update(pedido);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        } finally {
            UsuarioPresenter.registrarLogUsuario(Main.usr, "pedido", pedido.getIdPedido() + "->" + pedido.getFechaRegistro(), Constantes.LOG_UPDATE);
        }
    }

    public static List<Pedido> buscarPedido(String fDesde, String fHasta) {

        String q = "from Pedido";
        int cont = 0;
        
        if(fDesde!=null || fHasta!=null)
        {  q+=" where ";            
            if (fDesde != null) {
                q += "to_char( fecha_registro , 'YYYY-MM-DD' ) >= :fDesde";
                cont++;
            }
            if (fHasta != null) {
                if (cont>0) { q += " AND ";}
                 q += "to_char( fecha_registro , 'YYYY-MM-DD' ) <= :fHasta";
                cont++;
            }            
        }    

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);      
        if (fDesde != null) { query.setParameter("fDesde",fDesde);}
        if (fHasta != null) { query.setParameter("fHasta", fHasta);}
        Main.usrSesion.session.getTransaction().commit();

        return query.list();

    }

    public static int CantidadPedidosPendientes() {
        List<Pedido> lstPedidos = new ArrayList<Pedido>();
        int contador = 0;
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Pedido where estado = 0");
        lstPedidos = query.list();
        Main.usrSesion.session.getTransaction().commit();
        contador = lstPedidos.size();
        return contador;
    }

    public static List<Pedido> pedidosPendientes() {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Pedido where estado = 0");
        Main.usrSesion.session.getTransaction().commit();
        return query.list();
    }

    public static List<Pedido> pedidosEnRuta() {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Pedido where estado = 1");
        Main.usrSesion.session.getTransaction().commit();
        return query.list();
    }
    
    public static Pedido buscarPedidoporCodigo(int codPedido) {

        String q = "from Pedido where id_pedido = :codigo";
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);      
        query.setParameter("codigo", codPedido);
        Pedido objPedido = (Pedido)query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();

        return objPedido;

    }
    
}
